package com.cxm.helper.service;

import com.cxm.helper.pojo.UserLike;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

/**
* @author chenximeng
* @description 针对表【user_like(用户点赞表)】的数据库操作Service
* @createDate 2022-11-30 14:31:57
*/
public interface UserLikeService extends IService<UserLike> {

    /**
     * 点赞。状态为1
     * @param userId
     * @param articleId
     */
    void saveLiked2Redis(Long userId, Long articleId);

    /**
     * 获取帖子是否被该用户点赞
     * @param articleIds
     * @param userId
     * @return Map<articleId, likeStatus>
     */
    Map<Long, Integer> articleListIsLiked(List<Long> articleIds, Long userId);

    /**
     * 从redis获取帖子点赞数
     * @param articleIds
     * @return Map<articleId, likedNum>
     */
    Map<Long, Long> getArticleLikedNumFromRedis(List<Long> articleIds, boolean isRemove);

    /**
     * 取消点赞。将状态改变为0
     * @param userId
     * @param articleId
     */
    void unlikeFromRedis(Long userId, Long articleId);

    /**
     * 该帖子的点赞数加1
     * @param articleId
     */
    void incrementLikedCount(Long articleId);

    /**
     * 该帖子的点赞数减1
     * @param articleId
     */
    void decrementLikedCount(Long articleId);

    /**
     * 获取Redis中存储的所有点赞数据
     * @return
     */
    List<UserLike> getLikedDataFromRedisAndRemove();

    /**
     * 根据点赞人的id查询点赞列表（即查询这个人都给谁点赞过）
     * @param articleId
     * @return
     */
    List<UserLike> getLikedListByLikedArticleId(Long articleId);

    /**
     * 将Redis里的点赞数据存入数据库中
     */
    void transLikedFromRedis2DB();

    /**
     * 将Redis中的点赞数量数据存入数据库
     */
    void transLikedNumFromRedis2DB();

    /**
     * 将list转换为文章分组点赞数
     * @param list
     * @return
     */
    Map<Long, Long> transferUserLikeList2Count(List<UserLike> list);


}
